//
//  ViewController.m
//  页面之间传值
//
//  Created by MAC on 2018/8/24.
//  Copyright © 2018年 MAC. All rights reserved.
//

#import "ViewController.h"
#import "AViewController.h"
#import "BViewController.h"
#import "CViewController.h"
#import "DViewController.h"
#import "EViewController.h"
#import "FViewController.h"


@interface ViewController () <UITableViewDelegate,UITableViewDataSource>

@property (nonatomic,strong) UITableView *tableView;
@property (nonatomic,strong) NSArray *vcArr;
@property (nonatomic,strong) NSArray *vcTitleArr;
@end

@implementation ViewController
- (UITableView *)tableView
{
    if (!_tableView) {
        _tableView = [[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStylePlain];
        _tableView.dataSource = self;
        _tableView.delegate = self;
    }
    return _tableView;
}
- (NSArray *)vcArr
{
    if (!_vcArr) {
        _vcArr = [NSArray array];
    }
    return _vcArr;
}
- (NSArray *)vcTitleArr
{
    if (!_vcTitleArr) {
        _vcTitleArr = [NSArray array];
    }
    return _vcTitleArr;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    
    /*
     什么是页面传值？？
     页面传值：既不同视图控制器之间数据传递的过程
     页面传值描述：
     页面一：有两个控件分别是展示label和跳转到页面二的button
     页面二：有两个控件分别是TextField和传值给页面一的button
     
     [进入界面是页面一，其页面中除了label和button没有任何控件，点击名为跳转页面二的button，并进行跳转到页面二] ——> [进入页面二，其页面中除了TextField和button没有任何控件，在TextField中输入内容，之后点击名为给页面一传值button，并进行跳转到页面一] ——> [进入页面一，把传过来的值展示到label中，到处完成页面传值]
     */
    
    self.vcArr = @[@"AViewController",@"BViewController",@"CViewController",@"DViewController",@"EViewController",@"FViewController"];
    self.vcTitleArr =@[@"页面传值-属性传值",@"页面传值-单例传值",@"页面传值-NSUserDefaults传值",@"页面传值-代理传值",@"页面传值-block传值",@"页面传值-通知传值"];
    /*
     属性传值：正向传值
     单例传值：可以跨页面传值，两个直接跳转页面之间的传值
     NSUserDefaults传值：文件传值，也可以跨页面传值
     */
    
    [self.view addSubview:self.tableView];
    
    /*
     总结：
     几种常见的页面传值方式：
     1.属性传值：正向传值。不能反向传值，不能跨页面传值
     2.单例传值：正向传值，反向传值，跨页面传值。必须创建一个单例对象和单例类。单例传值是先写到内存中，然后再从内存中读取；
     3.NSUserDafeults传值：正向传值，反向传值，跨页面传值。NSUserDafeults传值是先写到沙盒中，然后再从沙盒中读取；
     4.代理传值：反向传值，一对一的传值，必须两个页面建立代理关系才可以进行传值；
     5.block传值：反向传值，一对一的传值，两个页面必须指定之后才能进行传值；
     6.通知传值：多对多传值，跨页面传值。发送方发送一个通知，任何一个页面都可以接收这个通知，接收方可以接收来自任何一个发送方；
     
     正向传值：
     前三个可以用来正向传值
     反向传值：
     除了第一个不能反向传值，其他五个都可以反向传值
     一对一传值：
     代理传值、block传值、通知传值可以一对一传值
     前俩个也就是代理传值、block传值是必须建立换代理关系或者指定之后才能进行传值；
     多对多传值：
     通知传值可以多对多传值
     */
    
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.vcArr.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *strCell = @"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:strCell];
    if (cell == nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:strCell];
        
    }
    cell.textLabel.text = [self.vcTitleArr objectAtIndex:indexPath.row];
    cell.textLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:20];
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIViewController *vc = [[NSClassFromString([self.vcArr objectAtIndex:indexPath.row]) alloc] init];
    
    vc.navigationItem.title = [self.vcTitleArr objectAtIndex:indexPath.row];
    vc.view.backgroundColor = [UIColor whiteColor];
    UIBarButtonItem *customLeftBarButtonItem = [[UIBarButtonItem alloc] init];
    
    customLeftBarButtonItem.title = @"返回";
    
    self.navigationItem.backBarButtonItem = customLeftBarButtonItem;

    [self.navigationController pushViewController:vc animated:YES];
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


@end
